package com.ht.api.bigtask.impl.qywx;

import com.ht.api.bigtask.BaseBigTask;
import com.ht.api.db.Db;
import com.ht.api.db.Entity;
import com.ht.api.open.OpenUtil;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 大任务：【企业微信】第三步，获取群列表
 * @author asq
 * @createTime 2025年1月15日 09:21:41
 */
@Slf4j
public class QueryChatListTask extends BaseBigTask {
	/** 接口ID */
	private static final long API_ID = 1878797246598877184L;
	/** 每次处理数据条数 */
	private static final int PAGE_SIZE = 100;

	@Override
	protected void doExecute(String appId, JSONObject context, Entity bean) {
		long t = System.currentTimeMillis();
		// 从上下文中获取参数
		JSONArray arr = context.getJSONArray("follow_user");

		// 执行自身任务
		JSONArray list = JSONUtil.createArray();
		int pageNum = getPageNum();
		do {
			// 组装接口参数
	        JSONObject values = JSONUtil.createObj();
	        values.set("limit", 1000);
	        values.set("cursor", "");
	        values.set("status_filter", 0);
	        values.set("owner_filter.userid_list", arr.subList(pageNum, Math.min(pageNum + PAGE_SIZE, arr.size())));

	        // 调用接口
			String str = OpenUtil.call(appId, API_ID, values, true);
			
			// 写入租户库的open_data表
			if (!isOver()) {
				JSONObject entity = JSONUtil.parseObj(str);
				Db.insert(getTenantDs(appId), createOpenDataEntity(appId, API_ID, entity));
			} else {
				log.info("[BigTask]本任务已完成，不再写数据库，任务名：QueryChatListTask，【企业微信】第三步，获取群列表");
			}
			
			// 记录任务进度（任务进度是每个任务节点各记各的，互不影响）
			pageNum += PAGE_SIZE;
			saveInfo(PAGE_NUM_NAME, pageNum, bean);
			
			// 获取查询数据	
			JSONObject obj = JSONUtil.parseObj(str);
			JSONArray jsonArray = obj.getJSONArray("group_chat_list");

			list.addAll(jsonArray);
		} while(pageNum < arr.size());
		log.info("getChatList>>{}", list.size());

		// 写参数到上下文中
		context.set("group_chat_list", list);
		log.info("[BigTask]完成【企业微信】第三步，获取群列表，耗时：{}ms", (System.currentTimeMillis() - t));
	}
}
